﻿
namespace SistemaLogistica.Windows.Forms.Administracion
{
    using System;
    using System.Windows.Forms;
    using EDOSwit.Controls.Helpers;
    using EDOSwit.Controls.Types;
    using EDOSwit.Controls.UserControls;
    using SistemaLogistica.Business.Entities;
    using SistemaLogistica.Business.Logic;
    using SistemaLogistica.Windows.Helpers;

    public partial class CwfCargos : MantenedorSeguro
    {
        public CwfCargos()
        {
            InitializeComponent();
        }

        protected override void LoadPermisos()
        {
            this.TsMenu.Permisos.AddRange(Metodos.GetPermisos(Convert.ToByte(this.Tag)));
        }

        protected override void FocusKeyPress(object sender, KeyPressEventArgs e)
        {
            base.FocusKeyPress(sender, e);
        }

        protected override void InitialLoad()
        {
            try
            {
                this.cwfUbigeo.cmbSucursal.DisplayMember = "Direccion";
                this.cwfUbigeo.cmbSucursal.ValueMember = "IdSucursal";

                this.cmbAreas.DisplayMember = "Nombre";
                this.cmbAreas.ValueMember = "IdArea";

                this.cmbCargo.DisplayMember = "Nombre";
                this.cmbCargo.ValueMember = "IdCargo";

                this.MantenedorBindingSource.DataSource = CargoManager.Instancia.Listar();
                this.dgvMantenedor.DataSource = this.MantenedorBindingSource;
                OcultarColumnas();
                this.dgvMantenedor.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, Constantes.TituloMensaje, ex.Message);
            }
        }

        protected override void LoadData(object obj)
        {
            Cargo cargo = obj as Cargo ;
            if (cargo != null)
            {
                this.cwfUbigeo.cmbDepartamento.SelectedValue = cargo.Area.Sucursal.Ubigeo.IdDepartamento;
                this.cwfUbigeo.cmbProvincia.SelectedValue = cargo.Area.Sucursal.Ubigeo.IdProvincia;
                this.cwfUbigeo.cmbDistrito.SelectedValue = cargo.Area.Sucursal.Ubigeo.IdDistrito;
                this.cwfUbigeo.cmbSucursal.SelectedValue = cargo.Area.Sucursal.IdSucursal;
                this.cmbAreas.SelectedValue = cargo.Area.IdArea;
                this.cmbCargo.SelectedIndex = -1;
                if (cargo.IdCargoSuperior != null)
                    this.cmbCargo.DataSource = CargoManager.Instancia.ListarPorCargoSuperior(cargo.IdCargoSuperior.Value);
                this.txtNombre.Text = cargo.Nombre;
                this.txtDescripcion.Text = cargo.Descripcion; 
                this.identificador = cargo.IdCargo;
            }
        }

        protected override void EventoNuevo()
        {
            this.cwfUbigeo.cmbDepartamento.Focus();
        }

        protected override void EventoEditar()
        {
            this.cwfUbigeo.cmbDepartamento.Focus();
        }

        protected override void BuscarData()
        {
            try
            {
                this.MantenedorBindingSource.DataSource = CargoManager.Instancia.Buscar(this.txtBuscar.Text);
                this.dgvMantenedor.DataSource = this.MantenedorBindingSource;
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, Constantes.TituloMensaje, ex.Message);
            }
        }

        protected override bool SaveData()
        {
            bool result = false;
            int posicion = this.MantenedorBindingSource.Position;
            try
            {
                switch (this.estadoActual)
                {
                    case EstadoActual.Nuevo:
                        CargoManager.Instancia.Agregar(GetCargo());
                        break;
                    case EstadoActual.Editar:
                        CargoManager.Instancia.Actualizar(GetCargo());
                        break;
                    case EstadoActual.Eliminar:
                        CargoManager.Instancia.Eliminar(Convert.ToInt32(this.identificador));
                        posicion -= 1;
                        break;
                    default:
                        break;
                }

                result = true;
                InitialLoad();
                this.MantenedorBindingSource.Position = posicion;
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, Constantes.TituloMensaje, ex.Message);
            }
            return result;
        }

        protected override bool ValidateData()
        {
            bool result = true;

            if (string.IsNullOrEmpty(this.txtNombre.Text.Trim()))
            {
                this.errValidator.SetError(this.txtNombre, "Ingresar Nombre.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.txtNombre, string.Empty);
            }
            if (this.cmbAreas.SelectedIndex == -1)
            {
                this.errValidator.SetError(this.cmbAreas, "Seleccionar area.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.cmbAreas, string.Empty);
            }
            return result;
        }

        private Cargo GetCargo()
        {
            Cargo cargo = new Cargo();
            cargo.IdCargo = Convert.ToInt32(this.identificador);
            cargo.Nombre = this.txtNombre.Text.Trim();
            cargo.Area = new Area { IdArea = Convert.ToInt32(this.cmbAreas.SelectedValue) };
            cargo.Descripcion =txtDescripcion.Text;
            if (this.cmbCargo.SelectedIndex != -1)
                cargo.IdCargoSuperior = Convert.ToInt32(this.cmbCargo.SelectedValue);
            return cargo;
        }

        private void OcultarColumnas()
        {
            this.dgvMantenedor.Columns["IdCargo"].HeaderText = "ID";
            this.dgvMantenedor.Columns["IdCargoSuperior"].Visible = false;
        }

        protected override void ClearControls()
        {
            this.identificador = 0;
            base.ClearControls();
        }

        private void cmbAreas_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.cmbCargo.DataSource = CargoManager.Instancia.ListarPorArea(Convert.ToInt32(this.cmbAreas.SelectedValue));
        }

        private void cwfUbigeo_seleccionarSucursal(object sender, int idSucursal)
        {
            this.cmbAreas.DataSource = AreaManager.Instancia.ListarPosSucursal(Convert.ToInt32(idSucursal));
        }
    }
}

